const VueLoaderPlugin = require('vue-loader/lib/plugin')
const htmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')

module.exports = {
    entry: {
        bundle: path.resolve(__dirname, 'src/main.js')
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'main.js'
    },
    // 省略了前面的内容
    devServer: {
        // --open --contentBase src --port 3000 --hot",
        open: true,
        contentBase: 'src',
        port: 3000,
        hot: true
    },
    module: {
        rules: [
            // ... 其它规则
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            }, //  配置处理 .css 文件的第三方loader 规则
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            }, //配置处理 .less 文件的第三方 loader 规则
            {
                test: /\.scss$/,
                use: ['style-loader', 'css-loader', 'sass-loader']
            }, // 配置处理 .scss 文件的 第三方 loader 规则
            {
                test: /\.(jpg|png|gif|bmp|svg)$/,
                use: 'url-loader?limit=1000&name=[hash:8]-[name].[ext]'
            },
            {
                test: /\.js$/,
                // 排除的部分，node_modules,1、没有必要2、node_modules特别大，打包比较慢
                exclude: /(node_modules|bower_components)/,
                // 使用数组和字符串配置，这里也可以使用对象配置，loader是js文件的处理模块，options是参数，里面参数的
                // 内容是根据不同loader有不同的内容，这里presets是指定babel-loader预置的翻译语法
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    },
    plugins: [
        new htmlWebpackPlugin({
            template: path.resolve(__dirname, 'src/index.html'),
            filename: 'index.html'
        }),
        // 请确保引入这个插件！
        new VueLoaderPlugin()
    ],
    resolve: {
        alias: { // 修改 Vue 被导入时候的包的路径
            "vue$": "vue/dist/vue.js",
            "@": path.join(__dirname, "src"),
            "@components": path.join(__dirname, "src/components")
        }
    }
}